Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / core / data / src / commonTest / kotlin / org / meshtastic / core / data / manager / FromRadioPacketHandlerImplTest.kt

Displaying Raw • Download

core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt bf929c20f274232e0eb8ddc19b2dc82403e99e5b (bf929c20) Text, 7.25 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.data.manager

Tff7b72import T7ee787dev.mokkery.MockMode
Tff7b72import T7ee787dev.mokkery.answering.returns
Tff7b72import T7ee787dev.mokkery.every
Tff7b72import T7ee787dev.mokkery.mock
Tff7b72import T7ee787dev.mokkery.verify
Tff7b72import T7ee787org.meshtastic.core.repository.MeshConfigFlowManager
Tff7b72import T7ee787org.meshtastic.core.repository.MeshConfigHandler
Tff7b72import T7ee787org.meshtastic.core.repository.MqttManager
Tff7b72import T7ee787org.meshtastic.core.repository.NotificationManager
Tff7b72import T7ee787org.meshtastic.core.repository.PacketHandler
Tff7b72import T7ee787org.meshtastic.core.repository.ServiceRepository
Tff7b72import T7ee787org.meshtastic.core.repository.XModemManager
Tff7b72import T7ee787org.meshtastic.core.testing.FakeLockdownCoordinator
Tff7b72import T7ee787org.meshtastic.proto.Channel
Tff7b72import T7ee787org.meshtastic.proto.ClientNotification
Tff7b72import T7ee787org.meshtastic.proto.Config
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetadata
Tff7b72import T7ee787org.meshtastic.proto.FromRadio
Tff7b72import T7ee787org.meshtastic.proto.LoRaRegionPresetMap
Tff7b72import T7ee787org.meshtastic.proto.LockdownStatus
Tff7b72import T7ee787org.meshtastic.proto.ModuleConfig
Tff7b72import T7ee787org.meshtastic.proto.MqttClientProxyMessage
Tff7b72import T7ee787org.meshtastic.proto.MyNodeInfo
Tff7b72import T7ee787org.meshtastic.proto.QueueStatus
Tff7b72import T7ee787kotlin.test.BeforeTest
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertTrue
Tff7b72import T7ee787org.meshtastic.proto.NodeInfo Tff7b72as Te6edf3ProtoNodeInfo

Tff7b72class T56d364FromRadioPacketHandlerImplTest Tb4b4b4{

Tff7b72private Tff7b72val Te6edf3serviceRepositoryTb4b4b4: Te6edf3ServiceRepository Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3mqttManagerTb4b4b4: Te6edf3MqttManager Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3packetHandlerTb4b4b4: Te6edf3PacketHandler Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3notificationManagerTb4b4b4: Te6edf3NotificationManager Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3configFlowManagerTb4b4b4: Te6edf3MeshConfigFlowManager Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3configHandlerTb4b4b4: Te6edf3MeshConfigHandler Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3xmodemManagerTb4b4b4: Te6edf3XModemManager Tff7b72= Te6edf3mockTb4b4b4(Te6edf3MockModeTb4b4b4.Te6edf3autofillTb4b4b4)
Tff7b72private Tff7b72val Te6edf3lockdownCoordinator Tff7b72= Te6edf3FakeLockdownCoordinatorTb4b4b4(Tb4b4b4)

Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3handlerTb4b4b4: Te6edf3FromRadioPacketHandlerImpl

Tf0883e@BeforeTest
Tff7b72fun Td2a8ffsetupTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3handler Tff7b72=
Te6edf3FromRadioPacketHandlerImplTb4b4b4(
Te6edf3serviceRepositoryTb4b4b4,
Te6edf3lazy Tb4b4b4{ Te6edf3configFlowManager Tb4b4b4}Tb4b4b4,
Te6edf3lazy Tb4b4b4{ Te6edf3configHandler Tb4b4b4}Tb4b4b4,
Te6edf3lazy Tb4b4b4{ Te6edf3xmodemManager Tb4b4b4}Tb4b4b4,
Te6edf3mqttManagerTb4b4b4,
Te6edf3packetHandlerTb4b4b4,
Te6edf3notificationManagerTb4b4b4,
Te6edf3lockdownCoordinatorTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes MY_INFO to configFlowManager`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3myInfo Tff7b72= Te6edf3MyNodeInfoTb4b4b4(Te6edf3my_node_num Tff7b72= T79c0ff1T79c0ff2T79c0ff3T79c0ff4Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3my_info Tff7b72= Te6edf3myInfoTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configFlowManagerTb4b4b4.Te6edf3handleMyInfoTb4b4b4(Te6edf3myInfoTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes METADATA to configFlowManager`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3metadata Tff7b72= Te6edf3DeviceMetadataTb4b4b4(Te6edf3firmware_version Tff7b72= Ta5d6ff"Ta5d6ffv1.0Ta5d6ff"Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3metadata Tff7b72= Te6edf3metadataTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configFlowManagerTb4b4b4.Te6edf3handleLocalMetadataTb4b4b4(Te6edf3metadataTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes NODE_INFO to configFlowManager and updates status`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3nodeInfo Tff7b72= Te6edf3ProtoNodeInfoTb4b4b4(Te6edf3num Tff7b72= T79c0ff1T79c0ff2T79c0ff3T79c0ff4Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3node_info Tff7b72= Te6edf3nodeInfoTb4b4b4)

Te6edf3every Tb4b4b4{ Te6edf3configFlowManagerTb4b4b4.Te6edf3newNodeCount Tb4b4b4} Te6edf3returns T79c0ff1

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configFlowManagerTb4b4b4.Te6edf3handleNodeInfoTb4b4b4(Te6edf3nodeInfoTb4b4b4) Tb4b4b4}
Te6edf3verify Tb4b4b4{ Te6edf3serviceRepositoryTb4b4b4.Te6edf3setConnectionProgressTb4b4b4(Ta5d6ff"Ta5d6ffNodes (1)Ta5d6ff"Tb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes CONFIG_COMPLETE_ID to configFlowManager`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3nonce Tff7b72= T79c0ff6T79c0ff9T79c0ff4T79c0ff2T79c0ff0
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3config_complete_id Tff7b72= Te6edf3nonceTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configFlowManagerTb4b4b4.Te6edf3handleConfigCompleteTb4b4b4(Te6edf3nonceTb4b4b4) Tb4b4b4}
Te6edf3assertTrueTb4b4b4(Te6edf3lockdownCoordinatorTb4b4b4.Te6edf3configCompleteCalledTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes LOCKDOWN_STATUS to lockdownCoordinator`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3lockdownStatus Tff7b72= Te6edf3LockdownStatusTb4b4b4(Te6edf3state Tff7b72= Te6edf3LockdownStatusTb4b4b4.Te6edf3StateTb4b4b4.Te6edf3LOCKEDTb4b4b4, Te6edf3lock_reason Tff7b72= Ta5d6ff"Ta5d6fftoken_missingTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3lockdown_status Tff7b72= Te6edf3lockdownStatusTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3lockdownStatusTb4b4b4, Te6edf3lockdownCoordinatorTb4b4b4.Te6edf3lastStatusTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes QUEUESTATUS to packetHandler`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3queueStatus Tff7b72= Te6edf3QueueStatusTb4b4b4(Te6edf3free Tff7b72= T79c0ff1T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3queueStatus Tff7b72= Te6edf3queueStatusTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3packetHandlerTb4b4b4.Te6edf3handleQueueStatusTb4b4b4(Te6edf3queueStatusTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes CONFIG to configHandler`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3config Tff7b72= Te6edf3ConfigTb4b4b4(Te6edf3lora Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3LoRaConfigTb4b4b4(Te6edf3use_preset Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3config Tff7b72= Te6edf3configTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configHandlerTb4b4b4.Te6edf3handleDeviceConfigTb4b4b4(Te6edf3configTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes MODULE_CONFIG to configHandler`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3moduleConfig Tff7b72= Te6edf3ModuleConfigTb4b4b4(Te6edf3mqtt Tff7b72= Te6edf3ModuleConfigTb4b4b4.Te6edf3MQTTConfigTb4b4b4(Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3moduleConfig Tff7b72= Te6edf3moduleConfigTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configHandlerTb4b4b4.Te6edf3handleModuleConfigTb4b4b4(Te6edf3moduleConfigTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes CHANNEL to configHandler`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3channel Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3index Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3channel Tff7b72= Te6edf3channelTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configHandlerTb4b4b4.Te6edf3handleChannelTb4b4b4(Te6edf3channelTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes REGION_PRESETS to configHandler`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3map Tff7b72= Te6edf3LoRaRegionPresetMapTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3region_presets Tff7b72= Te6edf3mapTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3configHandlerTb4b4b4.Te6edf3handleRegionPresetsTb4b4b4(Te6edf3mapTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes MQTT_CLIENT_PROXY_MESSAGE to mqttManager`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3proxyMsg Tff7b72= Te6edf3MqttClientProxyMessageTb4b4b4(Te6edf3topic Tff7b72= Ta5d6ff"Ta5d6fftest/topicTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3mqttClientProxyMessage Tff7b72= Te6edf3proxyMsgTb4b4b4)

Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)

Te6edf3verify Tb4b4b4{ Te6edf3mqttManagerTb4b4b4.Te6edf3handleMqttProxyMessageTb4b4b4(Te6edf3proxyMsgTb4b4b4) Tb4b4b4}
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`handleFromRadio routes CLIENTNOTIFICATION to serviceRepository`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3notification Tff7b72= Te6edf3ClientNotificationTb4b4b4(Te6edf3message Tff7b72= Ta5d6ff"Ta5d6fftestTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3proto Tff7b72= Te6edf3FromRadioTb4b4b4(Te6edf3clientNotification Tff7b72= Te6edf3notificationTb4b4b4)

T8b949e// Note: getString() from Compose Resources requires Skiko native lib which
T8b949e// is not available in headless JVM tests. We test the parts that don't trigger it.
Tff7b72try Tb4b4b4{
Te6edf3handlerTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3protoTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3_Tb4b4b4: Te6edf3ThrowableTb4b4b4) Tb4b4b4{
T8b949e// Expected: Skiko can't load in headless JVM/native
Tb4b4b4}

Te6edf3verify Tb4b4b4{ Te6edf3serviceRepositoryTb4b4b4.Te6edf3setClientNotificationTb4b4b4(Te6edf3notificationTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.18s